A system's identity may be established and authenticated based on the unique physical properties of the system. In some applications, physically unclonable functions (PUFs) embodied in integrated circuits (ICs) are used to exploit the unique physical characteristics of a system for purposes of authentication. Each instance of the IC will have slightly different physical characteristics due to the random variation in an IC fabrication process. A PUF circuit uses the physical characteristics to generate an identifier value, for example a binary number, which differs from one integrated circuit to the next due to the different physical characteristics of each manufactured device. These identifier values may be used to uniquely identify the integrated circuit, as a key for encryption and decryption, or for other purposes. Examples of circuits used to implement PUFs include delay circuits and ring oscillators, SRAMs, and cross-coupled latches. The terms PUF circuit and PUF may be used interchangeably herein.
PUFs may operate according to a challenge-response protocol. The input to a PUF is the challenge, and the output from the PUF is the response. The slight variations between instances of the PUF circuits in different systems result in the separate instances providing different responses to the same challenge. In addition to identification and authentication, PUF circuits may be used to generate volatile secret keys.
PUFs may be used to protect against unauthorized use of a circuit implemented in programmable logic of a System on Chip (SOC) or a field programmable gate array (FPGA), for example. An efficient implementation of a PUF is desirable in order to contain product costs. An implementation of a PUF that occupies considerable die area may add significantly to the cost of a product without enhancing functionality of the product. In some instances, programmable logic that is unused in implementing a circuit design on a device may be used to implement a PUF. For example, a ring-oscillator PUF may be implemented on unused look-up tables (LUTs) of programmable logic.